package com.aaron.crowd.util;

import com.aaron.crowd.constant.CrowdConstant;

import javax.servlet.http.HttpServletRequest;
import java.math.BigInteger;
import java.security.MessageDigest;

/**
 * @BelongsProject: atcrowdfuncding
 * @BelongsPackage: com.aaron.crowd
 * @author: Andy
 * @date: 2021.3.26 18:18
 * @Description: 判断请求类型的工具方法
 * 判断当前的请求是否为 Ajax 请求
 *      true:  当前是 Ajax 请求
 *      false：当前不是 Ajax 请求
 * @since JDK 1.8
 */
public class CrowdUtil {


    /**
     * 判断是否是Ajax的请求
     * @param request   请求体
     * @return 返回true 代表是 Ajax 请求，false 代表不是 Ajax 请求
     */
    public static boolean judgeRequestType(HttpServletRequest request){
        // 请求获取消息头
        String accept = request.getHeader("Accept");
        String xRequestedWith = request.getHeader("X-Requested-With");

        return (accept != null && accept.contains("application/json"))||
        (xRequestedWith != null && xRequestedWith.equals("XMLHttpRequest"));
    }


    /**
     * MD5格式加密
     * @param source  要进行加密的数据
     * @return 返回字符
     */
    public static String md5(String source){
        // 1、判断 source 是否有效
        if (source == null || source.length() == 0){
            // 2、如果不是有效的字符串抛出异常
            throw new RuntimeException(CrowdConstant.MESSAGE_STRING_INVALIDATE);
        }
        try {
            // 3、获取 MessageDigest 对象
            String algorithm = "md5";
            MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
            // 4、获得明文字符串对应的字节数组
            byte[] input = source.getBytes();
            // 5、执行加密
            byte[] output = messageDigest.digest(input);
            // 6、创建BigInteger对象
            int sigNum = 1;
            BigInteger bigInteger = new BigInteger(sigNum, output);
            // 7、按照16进制将bigInteger的值转化为字符串，再转为大写
            int radix = 16;
            return bigInteger.toString(radix).toUpperCase();
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

}
